package com.airlines.crewassignment.dao;

import java.util.Date;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.airlines.crewassignment.domain.DateTimeRange;
import com.airlines.crewassignment.domain.LinkLine;
import com.airlines.crewassignment.entity.linkline.LinkLineEntity;

/**
 * @author xxxx
 * @date 2018年3月27日 
 * @description
 */
public interface LinkLineMapper {
	/**
	 * 根据航班日期+机组连线号查询连线
	 * @param flightDate 不能为null
	 * @param crewLinkLineNo 可以为null
	 * @param flightCom 可以为null
	 * @return
	 */
	List<LinkLine> listLinkLineBase(LinkLineEntity linkLineEntity);
	

//	/**
//	 * 更新连线表中的任务环ID和任务明细ID
//	 * @param flightDate
//	 * @param crewLinkLineNo
//	 * @param loopIdFact
//	 * @param loopItemId
//	 */
//	void updateLoopIdFactF(@Param("flightDate")Date flightDate,@Param("crewLinkLineNo")Integer crewLinkLineNo,
//			@Param("loopIdFact")String loopIdFact,@Param("loopItemId")Integer loopItemId,
//			@Param("lastLinkLineBaseInfo") LinkLine lastLinkLineBaseInfo);
//
//	/**
//	 * 查询同一个任务环中的上一个连线信息
//	 * @param thisLinkLine 本连线信息
//	 * @param loopIdFact 任务环ID
//	 * @param lastIoopItemId 上一个任务明细ID
//	 * @return
//	 */
//	LinkLine getLastLinkLine(@Param("thisLinkLine") LinkLine thisLinkLine,@Param("loopIdFact") String loopIdFact, @Param("lastIoopItemId")  Integer lastIoopItemId);


	/**
	 * 根据日期段查询某个飞行员的 连线经历
	 * @param dateTimeRange
	 * @param workcode
	 * @return
	 */
	List<LinkLine> listLinkLineBaseByWorkcode(@Param("dutyCode")String dutyCode,@Param("dateTimeRange") DateTimeRange dateTimeRange, @Param("workcode") String workcode);
	
	/** 查询某个日期前，机组人员的最后一次连线基本信息
	 * @param beforeFlightDate not null
	 * @param dutyCode null able
	 * @param workcode null able
	 * @return
	 */
	List<LinkLine> listLastLinkLineBase(@Param("beforeFlightDate") Date beforeFlightDate,@Param("dutyCode")String dutyCode,@Param("workcode") String workcode);


	/**
	 * 根据日期，连线号，模块 查询连线
	 * @param flightDate
	 * @param crewLinkLineNo
	 * @param dutyCode
	 * @return
	 */
	LinkLine getLinkLine(@Param("flightDate")Date flightDate,@Param("crewLinkLineNo")Integer crewLinkLineNo, @Param("dutyCode")String dutyCode);
	
	/**
	 * 根据主键查询
	 */
	LinkLine getLinkLineByCrewLinkLineId(@Param("crewLinkLineId")Integer crewLinkLineId);


	/**
	 * 查询某段时间内没有任务环的连线
	 * @param dutyCode
	 * @param flightDateStart
	 * @param flightDateEnd
	 * @return
	 */
//	List<LinkLine> listLinkLineBaseNotHaveLoopIdFact(@Param("dutyCode")String dutyCode, @Param("flightDateStart")Date flightDateStart, @Param("flightDateEnd")Date flightDateEnd);
	
	
	/**
	 * 从连线生成器表中，获取连线
	 * @param dutyCode
	 * @param flightDate
	 * @return
	 */
	Integer getMaxCrewLinkLine(@Param("dutyCode")String dutyCode, @Param("flightDate")Date flightDate);
	
	int insertMaxCrewLinkLine(@Param("dutyCode")String dutyCode, @Param("flightDate")Date flightDate,@Param("maxCrewLinkLine")int maxCrewLinkLine);
	
	int updateMaxCrewLinkLine(@Param("dutyCode")String dutyCode, @Param("flightDate")Date flightDate,@Param("maxCrewLinkLine")int maxCrewLinkLine);

	int deleteMaxCrewLinkLine(@Param("dutyCode")String dutyCode,@Param("dateTimeRange")DateTimeRange dateTimeRange);
	/**
	 * 从T3001_FCA中获取最大连线号
	 * @param dutyCode
	 * @param flightDate
	 * @return
	 */
	List<Integer> getMaxCrewLinkLineHas(@Param("dutyCode")String dutyCode, @Param("flightDate")Date flightDate);
	
	/**
	 * 删除某个连线
	 * @param flightDate
	 * @param crewLinkLineNo
	 * @return
	 */
	int delete( @Param("flightDate")Date flightDate,@Param("crewLinkLineNo")Integer crewLinkLineNo);

	/**
	 * 删除某一段时间范围内的连线
	 * @param dtr
	 * @return
	 */
	int deleteByFlightDateRange(@Param("dateTimeRange")DateTimeRange dateTimeRange);
	
}
